package org.hot100.h098;

/**
 * @Author: wjy
 * @Date: 2021/12/29 9:22
 */
public class Solution {

    /**
     * 给你一个二叉树的根节点 root ，判断其是否是一个有效的二叉搜索树。
     *
     * 有效 二叉搜索树定义如下：
     *
     * 节点的左子树只包含 小于 当前节点的数。
     * 节点的右子树只包含 大于 当前节点的数。
     * 所有左子树和右子树自身必须也是二叉搜索树。
     *
     * 示例 1：
     *
     * 输入：root = [2,1,3]
     * 输出：true
     *
     * 示例 2：
     *
     * 输入：root = [5,1,4,null,null,3,6]
     * 输出：false
     * 解释：根节点的值是 5 ，但是右子节点的值是 4 。
     *
     * @param args
     */
    public static void main(String[] args) {
        TreeNode treeNode3 = new TreeNode(6);
        TreeNode treeNode6 = new TreeNode(8);
        TreeNode treeNode4 = new TreeNode(7, treeNode3, treeNode6);
        TreeNode treeNode1 = new TreeNode(1);
        TreeNode treeNode5 = new TreeNode(5, treeNode1, treeNode4);

        TreeNode treeNode0 = new TreeNode(0);

        Solution solution = new Solution();
        System.out.println(solution.isValidBST(treeNode0));

    }

    boolean flag = true;
    Integer temp = null;
    public boolean isValidBST(TreeNode root) {
        if (root == null) {
            return false;
        }
        this.check(root);
        return flag;
    }

    public void check(TreeNode node) {
        if (node == null) {
            return;
        }
        this.check(node.left);

        if (temp != null && node.val <= temp) {
            flag = false;
            return;
        }
        temp = node.val;
        this.check(node.right);
    }

}

class TreeNode {
    int val;
    TreeNode left;
    TreeNode right;
    TreeNode() {}
    TreeNode(int val) { this.val = val; }
    TreeNode(int val, TreeNode left, TreeNode right) {
        this.val = val;
        this.left = left;
        this.right = right;
    }
}